
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>面向对象三大特性</title>
</head>
<body>
    


    <script>
        //面向对象三大特性 封装、继承、多态   
        //  封装 ：  函数  对象  类  接口  数组   

        // 封装是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。
        // 封装可以被认为是一个保护屏障，防止该类的代码和数据被外部类定义的代码随机访问。
        // 要访问该类的代码和数据，必须通过严格的接口控制。
        // 封装最主要的功能在于我们能修改自己的实现代码，而不用修改那些调用我们代码的程序片段。
        // 适当的封装可以让程式码更容易理解与维护，也加强了程式码的安全性。

        // 1. 良好的封装能够减少耦合。
        // 2. 类内部的结构可以自由修改。
        // 3. 可以对成员变量进行更精确的控制。
        // 4. 隐藏信息，实现细节。


        function fn(arr) {
            return arr.map(ele=>{
                console.log(ele);
                return ele * 2;
            })
            // return  result
        }


        console.log(fn([1,2,3,4,5]));

        // 基类 父类  超类
        class  supType{
            name="Parent"
            constructor(){
                console.log("我是父函数的构造方法");
                console.log("parent-this",this);
            }
            say(){
                console.log("父类的方法");
                
            }

        }

        // 继承  子类继承父类的特征和行为，使得子类对象（实例）具有父类的实例域和方法，或子类从父类继承方法，使得子类具有父类相同的行为。
        class Child  extends  supType{
            constructor(){
                console.log("我是子类的构造方法");
                super()
                console.log('son-this:', this)
            }
        }

        let c = new Child()
        console.log(c.name);
        console.log(c.say());


      
        // 多态 多态是同一个行为具有多个不同表现形式或形态的能力。
        // 多态就是同一个接口，使用不同的实例而执行不同操作
        // 理解意思   子类型的实例指向了父类数据结构
        // let c1:supType = new Child()

        
        
      
    </script>
</body>
</html>